今天把 item 新增做完 跟前面的程式碼很像
在 category.html 加上 新增商品 的連結
path route
store/urls.py
...
path('itemCreate/', views.itemCreate, name='itemCreate'),
...
ModelChoiceField 是用FK上,會產生下拉式選單
第一個參數是 資料來源
store/forms.py
...
class ItemForm(forms.ModelForm):
name = forms.CharField(label='名稱')
category = forms.ModelChoiceField(Category.objects.all(), label='類別')
price = forms.IntegerField(label='價錢')
class Meta:
model = Item
fields = ('name', 'category', 'price', )
下拉式選單顯示格式,應該說 Category類別 預設要顯示什麼
兩個 Category & Item 都補上 _str_():
store/models.py
...
def __str__(self):
return self.name
...
store/views.py
...
def itemCreate(request):
if request.method == 'GET':
itemForm = ItemForm()
return render(request, 'store/itemCreate.html', {'itemForm': itemForm})
elif request.method == 'POST':
itemForm = ItemForm(request.POST)
if not itemForm.is_valid():
return render(request, 'store/itemCreate.html', {'itemForm': itemForm})
itemForm.save()
messages.success(request, '新增成功')
return redirect(reverse('store:category'))
...
store/templates/store/itemCreate.html
{% extends 'main/base.html' %}
{% block content %}
<h3>新增項目</h3>
<form method="post" action="{% url 'store:itemCreate' %}">
{% csrf_token %}
{{ itemForm.as_p }}
<input type="submit" value="儲存">
</form>
{% endblock %}
顯示部分放在 點進去 類別裡面
category.item_set.all 可以撈出所有fk 這個資料表的資料
store/templates/store/categoryRead.html
...
<div>
{% if category.item_set.all %}
<table>
<tr>
<th>名稱</th>
<th>價錢</th>
</tr>
{% for item in category.item_set.all %}
<tr>
<td>{{ item.name }}</td>
<td>{{ item.price }}</td>
</tr>
{% endfor %}
</table>
{% endif %}
</div>
...
今天就到這裡